#include <iostream>
#include <string>

using namespace std;

class person
{
public:
    string name;    // 姓名
    string sex;     // 性别
    int age;        // 年龄

public:
    person(string name, int age , string  sex)
        : name(name), age(age) ,sex(sex)
    {
        cout << "父类有参构造" << endl;
    }
    person()
    {
        name = "未设置姓名";
        age = -1;
        sex = "沃尔玛塑料袋";
        cout << "父类无参构造" << endl;
    }

    ~person()
    {
        cout << "我是父类的析构" << endl;
    }
};

class student : public person
{
public:
    int id;

public:
    // 有参构造

    // 调用父类的有参构造函数
    student(string name, string sex , int age, int id)
        : person(name, age , sex), id(id)
    {
        cout << "子类有参构造" << endl;
    }

    student()
    {
        name = "未设置姓名";
        age = -1;
        sex = "沃尔玛塑料袋";
        id = -1;
        cout << "子类无参构造" << endl;
    }
    ~student()
    {
        cout << "我是子类的析构" << endl;
    }

public:
    void show_date()
    {
        // 子类内调用父类的成员属性
        cout << "姓名" << name << endl;         // 直接使用 子类没有重名的情况下 可以使用
        cout << "年龄" << person::age << endl; // 使用父类做区分 子类有重名的情况下 可以使用
        cout << "性别" << this->sex << endl;   // 和第一种一样
        // 
        cout << "学号" << this->id << endl;
    }
};

int main(int argc, char const *argv[])
{
    student s1;

    // 子类对象 类外如何 使用父类的成员
    s1.name = "张三";       // 直接使用
    s1.person::age = 10;    // 使用父类的作用域限定符
    s1.sex = "男";
    s1.id = 10;

    s1.show_date();



    return 0;
}

